// 指针与const

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int i, j;
    // 指针指向 i 不能改变（q的值不能改变）
    int * const q = &i;
    // OK
    i = 10;
    printf("%d\n", i);
    // OK
    *q = 11;
    printf("%d\n", i);
    // ERROR -> read-only
    // q = &j;

    // 不能通过 *p 的方式修改变量的值
    const int* p = &i;
    // ERROR -> read-only
    // *p = 26;
    // OK
    i = 26;
    printf("%d\n", i);
    // OK
    p = &j;
    // ERROR
    // *p = 10;

    // 判断 const 作用于谁，就看 const 在 * 前后
    // 在前，指针指向不能修改
    // const int * p1 = &i;
    // int const * p2 = &i;
    // 在后，不能通过指针修改变量
    // int * const p3 = &i;


    // 总是可以把一个非 const 的值转换成 const 的
    // void f(const int * x);
    // 防止数组/变量在函数内被修改
    
    return 0;
}